$(function () {
//声明变量
    //角色表格
    var role_dialog =$("#role_dialog");
    //角色弹出框
    var role_datagrid = $("#role_datagrid");
    //角色弹出表单
    var role_form = $("#role_form");
    //角色表单的两张权限列表
    var allPermission = $("#allPermission");
    var selfPermission = $("#selfPermission");

    //菜单抽取
    var menu_combotree = $("#menu_combotree")
    //角色列表
    role_datagrid.datagrid({
        url:'/role/query.do',
        fit:true,
        fitColumns:true,
        pagination:true,
        toolbar:'#role_toolbar',
        singleSelect:true,
        columns:[[
            {field:'id',checkbox:true},
            {field:'sn',title:'角色编号',width:80},
            {field:'name',title:'角色名称',width:80}
        ]]
    });

    //配置dialog,form表单
    role_dialog.dialog({
        width:500,
        height:400,
        buttons:'#form_btn',
        close:true,
        onClose:function () {
            //关闭的同时清除表单数据
            role_form.form('clear');
            //清空已有权限
            selfPermission.datagrid('loadData',[]);
            //重新查询所有权限
            allPermission.datagrid('reload');
        }
    });
    //配置表单内,所有权限,及 拥有权限的数据表
    allPermission.datagrid({
        width:250,
        height:350,
        fitColumns:true,
        url:'/permission/selectAll.do',
        title:'所有权限',
        columns:[[
            {field:'name',title:'权限名称',width:80,align:'center'}
        ]],
        onClickRow:function (index,row) {
            //每行的点击事件:选中的权限添加到已有权限中
            selfPermission.datagrid('appendRow',row);
            //把点击的数据从所有权限中移除掉
            allPermission.datagrid('deleteRow',index);
        }
    });
    selfPermission.datagrid({
        width:250,
        height:350,
        fitColumns:true,
        url:'/permission/selectByRoleId.do',
        title:'拥有权限',
        columns:[[
            {field:'name',title:'权限名称',width:80,align:'center'}
        ]],
        onClickRow:function (index,row) {
            //选中的权限添加到所有权限中
            allPermission.datagrid('appendRow',row);
            //把点击的数据从已有权限中移除掉
            selfPermission.datagrid('deleteRow',index);
        },
        onLoadSuccess:function (data) {
            //已有权限 (data.rows --- > 权限集合)
            //处理所有已有权限的数据,如果已经出现已有权限,name就需要从所有权限中删除掉
            //1 把已有权限id放到ids数组中
            var ids = $.map(data.rows,function (n) {
                return n.id;
            });
            //2.遍历所有权限数据
            var rows = allPermission.datagrid('getRows'); //获取当前所有权限中的数据
            for(var i=rows.length -1;i>=0;i--){
                //获取当前遍历的行 所有权限
                var permission = rows[i];
                //3.如果所有权限中的权限id 是存在在ids中意味重复,就移除掉
                var index = $.inArray(permission.id,ids);
                if(index >=0){
                    allPermission.datagrid('deleteRow',i);
                }

            }
        }
    });
    var methodObj = {
        add:function(){
            role_dialog.dialog('open');
            role_dialog.dialog('setTitle','新增角色');
        },
        del:function () {
            //获取一行数据
            var row = role_datagrid.datagrid('getSelected');
            //判断是否有选择选择数据
            if (!row) {
                //没有选择数据提示用户
                $.messager.alert("温馨提示", "至少要选择一条数据", "warning");
                return;//终止操作
            }
            //弹出确认框
            $.messager.confirm('确认', '您确认想要执行操作吗？', function (r) {
                if (r) {
                    //给后台发送后台
                    $.get("/role/delete.do", {id: row.id}, function (data) {
                        if (data.success) {
                            $.messager.alert('温馨提示', '操作成功', 'info', function () {
                                //加载刷新到当前界面
                                role_datagrid.datagrid('reload');
                            })
                        } else {
                            $.messager.alert("温馨提示", "操作失败", "error");
                        }
                    })
                }
            })
        },
        edit:function (){
            //获取一行数据
            var row = role_datagrid.datagrid('getSelected');
            //判断是否有选择选择数据
            if (!row) {
                //没有选择数据提示用户
                $.messager.alert("温馨提示","至少要选择一条数据","warning");
                return;//终止操作
            }
            //回显表单
            role_form.form('load',row);
            //回显权限数据
            selfPermission.datagrid('load',{roleId:row.id});
            //回显菜单数据
            $.get('/menu/selectByRoleId.do',{roleId:row.id},function(data){
                //将接收到的参数设置给tree
                $("#menu_combotree").combotree('setValue',data);
            },'json');
            //处理好回显数据后,打开编辑框
            role_dialog.dialog('open');
            //设置标题
            role_dialog.dialog('setTitle','编辑角色');
        },
        saved:function (){
            //提交表单
            role_form.form("submit",{
                url:'/role/saveOrUpdate.do',
                onSubmit:function(param){
                    //表单提交时提交额外的参数
                    //获取当前选择的权限所有行
                    var rows = selfPermission.datagrid('getRows');

                    for(var i= 0;i<rows.length;i++){
                        //遍历添加参数给角色的集合属性参数,permission对象.id
                        param["permissions["+i+"].id"] = rows[i].id;
                    }
                    //获取去菜单下拉框的数据
                    var tree = $("#menu_combotree").combotree('getValues');//获取已选到的菜单对象集合
                    for(var i= 0;i<tree.length;i++){
                        param["menus["+i+"].id"] = tree[i];
                    }
                },
                success:function (data) {
                    //回调函数:data表示返回数据解析为json
                    data = $.parseJSON(data);
                    if (data.success) {
                        //如果返回结果成功__弹出窗口提示
                        $.messager.alert('温馨提示','保存成功','info',function () {
                            role_datagrid.datagrid('reload');
                            methodObj.cancel();
                        })

                    }else {
                        //如果保存失败,则弹出窗口提示
                        $.messager.alert('温馨提示','保存失败','error');
                    }
                }
            });
        },

        cancel: function (){
            //关闭弹出框:
            role_dialog.dialog('close');
        }
    };
    //添加勾选复选框的事件, 当点击子菜单的时候自动勾选父菜单

    menu_combotree.combotree({
        url:'',
       onCheck:function(node){
           var treeObj = menu_combotree.combotree("tree");
           //获取该节点的父菜单
           var parent = treeObj.tree('getParent',node.target);
           if(parent){
               //设置为勾选状态
               treeObj.tree('check',parent.target)
           }
       }
    });
    //统一绑定事件:
    $("a[data-cmd]").click(function () {
        var methodname = $(this).data("cmd");
        //动态获取调用方法名字,调用方法;
        methodObj[methodname]();
    })

});

//删除

//编辑

//============表单的 按钮 保存/取消=================


//保存密码


//高级查询


//修改密码

